#include"util.hpp"
#include"config.hpp"
#include"date.hpp"
#include"hot.hpp"
#include"service.hpp"
#include<thread>
void FileUtilTest(const std::string& filename)
{
	// cloud::FileUtil fu(filename);
	// std::cout<<fu.FileSize()<<std::endl;
	// std::cout<<fu.LastMTime()<<std::endl;
	// std::cout<<fu.LastATime()<<std::endl;

	// std::cout<<fu.FileName()<<std::endl;

	// cloud::FileUtil fu(filename);
	// std::string body;
	// cloud::FileUtil nfu("./hello.txt");
	// nfu.SetContent(body);

	// std::string packname=filename+".lz";
	// cloud::FileUtil fu(filename);
	// fu.Compress(packname);
	// cloud::FileUtil pfu(packname);
	// pfu.UnCompress("./hello.txt");

	cloud::FileUtil fu(filename);
	fu.CreateDirectory();
	std::vector<std::string> arry;
	fu.ScanDirectory(&arry);
	for(auto &a :arry)
	{
		std::cout<<a<<std::endl;
	}
	return;
}

void ConfigTest()
{
	cloud::Config *config=cloud::Config::GetInstance();
	std::cout<<config->GetHotTime()<<std::endl;
	std::cout<<config->GetServerPort()<<std::endl;
	std::cout<<config->GetServerIp()<<std::endl;
	std::cout<<config->GetDownloadPrefix()<<std::endl;
	std::cout<<config->GetPackFileSuffix()<<std::endl;
	std::cout<<config->GetPackDir()<<std::endl;
	std::cout<<config->GetBackDir()<<std::endl;
	std::cout<<config->GetBackupFile()<<std::endl;

}

void DateTest(const std::string& filename)
{
	// cloud::BackupInfo info;
	// info.NewBackupInfo(filename);
	// cloud::DataManager date;
	// std::cout<<"--------------------insert and url-----------"<<std::endl;
	// date.Insert(info);

	// cloud::BackupInfo tmp;
	// date.GetOneByURL("/download/bundle.h",&tmp);
	// std::cout<<tmp.pack_flag<<std::endl;
	// std::cout<<tmp.fsize<<std::endl;
	// std::cout<<tmp.mtime<<std::endl;
	// std::cout<<tmp.atime<<std::endl;
	// std::cout<<tmp.real_path<<std::endl;
	// std::cout<<tmp.pack_path<<std::endl;
	// std::cout<<tmp.url<<std::endl;
	// std::cout<<"--------------------update and getall-----------"<<std::endl;
	// info.pack_flag=true;
	// date.Update(info);
	// std::vector<cloud::BackupInfo> arry;
	// date.GetAll(&arry);
	// for(auto &a :arry)
	// {
	// 	std::cout<<a.pack_flag<<std::endl;
	// 	std::cout<<a.fsize<<std::endl;
	// 	std::cout<<a.mtime<<std::endl;
	// 	std::cout<<a.atime<<std::endl;
	// 	std::cout<<a.real_path<<std::endl;
	// 	std::cout<<a.pack_path<<std::endl;
	// 	std::cout<<a.url<<std::endl;
	// }
	// std::cout<<"--------------------realpath--------------"<<std::endl;
	// date.GetOneByRealPath(filename,&tmp);
	// std::cout<<tmp.pack_flag<<std::endl;
	// std::cout<<tmp.fsize<<std::endl;
	// std::cout<<tmp.mtime<<std::endl;
	// std::cout<<tmp.atime<<std::endl;
	// std::cout<<tmp.real_path<<std::endl;
	// std::cout<<tmp.pack_path<<std::endl;
	// std::cout<<tmp.url<<std::endl;
	// std::cout<<info.pack_flag<<std::endl;
	// std::cout<<info.fsize<<std::endl;
	// std::cout<<info.mtime<<std::endl;
	// std::cout<<info.atime<<std::endl;
	// std::cout<<info.real_path<<std::endl;
	// std::cout<<info.pack_path<<std::endl;
	// std::cout<<info.url<<std::endl;
	//date.Storage();
}
void DateTest2(const std::string& filename)
{
	cloud::DataManager date;
	std::vector<cloud::BackupInfo> arry;
	date.GetAll(&arry);
	for(auto &a :arry)
	{
		std::cout<<a.pack_flag<<std::endl;
		std::cout<<a.fsize<<std::endl;
		std::cout<<a.mtime<<std::endl;
		std::cout<<a.atime<<std::endl;
		std::cout<<a.real_path<<std::endl;
		std::cout<<a.pack_path<<std::endl;
		std::cout<<a.url<<std::endl;
	}
}

cloud::DataManager* _date;
void HotTest()
{
	_date=new cloud::DataManager();
	cloud::HotManager hot;
	hot.RunModule();
}

void ServiceTest()
{
	cloud::Service srv;
	srv.RunModule();
}

int main(int argc,char* argv[])
{
	_date=new cloud::DataManager();
	//FileUtilTest(argv[1]);
	//ConfigTest();
	//DateTest(argv[1]);
	//DateTest2(argv[1]);
	//HotTest();
	//ServiceTest();
	std::thread thread_hot_manager(HotTest);
	std::thread thread_servcie(ServiceTest);
	thread_hot_manager.join();
	thread_servcie.join();
	return 0;
}
